﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace AlgorithmTest
{
    // T_[四个数字排序]_[算法名]
    public class T_0110_RemoveElements : IAlgorithm
    {
        // title

        // 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。

        // 提示：
        //  列表中的节点数目在范围[0, 104] 内
        //  1 <= Node.val <= 50
        //  0 <= val <= 50

        public void Test()
        {
            // 算法参数定义
            var head = new ListNode(8);
            // 算法执行与打印
            Console.WriteLine(RemoveElements(head, 8));
        }

        // 算法
        public ListNode RemoveElements(ListNode head, int val)
        {
            while (head != null && head.val == val)
                head = head.next;
            if (head == null)
                return null;
            var temp = head;
            while (temp != null && temp.next != null)
            {
                while (temp.next != null && temp.next.val == val)
                    temp.next = temp.next.next;
                temp = temp.next;
            }
            return head;
        }
    }
}
